package com.zimin.mapper.pojo;

import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zimin.common.utils.BeanUtils;
import com.zimin.shared.pojo.PageVO;

import java.io.Serializable;
import java.util.List;

/**
 * 公共的Service
 *
 * @author zimin
 * @since 2021/10/18 11:32 上午
 */
public interface IBaseService<T> extends IService<T> {
    /**
     * <p>page对象转换pageVO对象</p>
     *
     * @param tPage
     * @param listVO
     * @return com.zimin.shared.pojo.PageVO<V>
     * @author zimin
     * @since 2021-11-22 18:04:35
     */
    default <T,V> PageVO<V> pageToPageVO(Page<T> tPage, List<V> listVO){
        return  PageVO.<V>builder().current(tPage.getCurrent())
                .size(tPage.getSize()).total(tPage.getTotal()).records(listVO).build();
    }


    default <V> V getById(Serializable id, Class<V> v) {
        T t = getById(id);
        return BeanUtils.coverClass(t, v);
    }

    default <V> V getOne(LambdaQueryChainWrapper<T> lambdaQueryChainWrapper, Class<V> v) {
        T t = lambdaQueryChainWrapper.one();
        return BeanUtils.coverClass(t, v);
    }

    default <V> List<V> list(LambdaQueryChainWrapper<T> lambdaQueryChainWrapper, Class<V> v) {
        List<T> ts = lambdaQueryChainWrapper.list();
        return BeanUtils.listEntityToView(ts, v);
    }


}
